Jackson হল একটি জনপ্রিয় JSON প্রসেসিং লাইব্রেরি, যা Java Objects এবং JSON ফরম্যাটের মধ্যে রূপান্তর (serialization/deserialization) করতে ব্যবহৃত হয়। ObjectMapper হল Jackson এর সবচেয়ে গুরুত্বপূর্ণ ক্লাস যা JSON ডেটা থেকে Java objects তৈরি (deserialization) এবং Java objects থেকে JSON তৈরি (serialization) করার জন্য ব্যবহৃত হয়।
এখানে Jackson ObjectMapper ব্যবহার করার পদ্ধতি এবং এর বিভিন্ন সুবিধা নিয়ে আলোচনা করা হয়েছে।
1. Jackson ObjectMapper ব্যবহার শুরু করা
a) Jackson Dependency Add করা
Jackson ব্যবহার করার জন্য প্রথমে আপনার প্রজেক্টে Jackson লাইব্রেরি যুক্ত করতে হবে। আপনি যদি Maven ব্যবহার করেন, তবে নিচের মতো pom.xml-এ Jackson-এর ডিপেন্ডেন্সি যোগ করতে হবে:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
যদি আপনি Gradle ব্যবহার করেন, তবে নিচের ডিপেন্ডেন্সি যোগ করতে পারেন:
implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
এটি Jackson এর core ফিচার এবং ObjectMapper ক্লাসসহ অন্যান্য দরকারি ক্লাসগুলিও অন্তর্ভুক্ত করবে।
2. ObjectMapper ব্যবহার করে JSON থেকে Java Object (Deserialization)
Deserialization হল JSON ডেটা থেকে Java Object তৈরির প্রক্রিয়া। Jackson এর ObjectMapper ব্যবহার করে আপনি JSON স্ট্রিংকে একটি Java Object-এ রূপান্তর করতে পারেন।
a) Basic Deserialization Example:
ধরা যাক, আপনার একটি Person ক্লাস আছে এবং আপনি একটি JSON স্ট্রিংকে সেই ক্লাসের একটি অবজেক্টে রূপান্তর করতে চান।
Person Class:
public class Person {
private String name;
private int age;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
String json = "{\"name\":\"John\", \"age\":30}";
ObjectMapper objectMapper = new ObjectMapper();
try {
// Deserialize JSON string to Java Object
Person person = objectMapper.readValue(json, Person.class);
System.out.println(person.getName()); // Output: John
System.out.println(person.getAge()); // Output: 30
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
objectMapper.readValue(json, Person.class)— এখানেjsonস্ট্রিংটি Person ক্লাসের একটি অবজেক্টে রূপান্তরিত হচ্ছে।Person.classহল সেই Java class যা JSON ডেটাকে ম্যাপ করবে।
3. ObjectMapper ব্যবহার করে Java Object থেকে JSON (Serialization)
Serialization হল Java Object থেকে JSON ডেটা তৈরি করার প্রক্রিয়া। Jackson এর ObjectMapper ব্যবহার করে আপনি Java Object থেকে JSON স্ট্রিং তৈরি করতে পারেন।
a) Basic Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) {
Person person = new Person();
person.setName("John");
person.setAge(30);
ObjectMapper objectMapper = new ObjectMapper();
try {
// Serialize Java Object to JSON string
String jsonString = objectMapper.writeValueAsString(person);
System.out.println(jsonString);
// Output: {"name":"John","age":30}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
objectMapper.writeValueAsString(person)— এখানে Person অবজেক্টটি JSON স্ট্রিং-এ রূপান্তরিত হচ্ছে।- আপনি writeValue মেথড দিয়ে JSON ফাইলেও লিখতে পারেন (যেমন,
writeValue(new File("person.json"), person)), যেটি JSON ডেটা ফাইল আকারে সংরক্ষণ করবে।
4. Customizing ObjectMapper for More Flexibility
Jackson এর ObjectMapper ক্লাসের অনেক কনফিগারেশন অপশন রয়েছে যা আপনাকে JSON পার্সিং আরও কাস্টমাইজ করতে সহায়তা করে। উদাহরণস্বরূপ:
a) Date Formatting (Custom Date Format):
Jackson ডিফল্টভাবে ISO 8601 ফরম্যাটে dates পার্স করে, তবে আপনি চাইলে Custom date format ব্যবহার করতে পারেন।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JacksonExample {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
try {
String jsonDate = objectMapper.writeValueAsString(new Date());
System.out.println(jsonDate); // Output: 2023-12-19
} catch (Exception e) {
e.printStackTrace();
}
}
}
b) Ignore Unknown Properties:
যদি JSON ডেটাতে কিছু অতিরিক্ত প্রপার্টি থাকে, এবং আপনি সেগুলি এড়াতে চান, তবে ObjectMapper এ ignore unknown properties কনফিগার করা যায়।
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
c) Ignore Null Values in JSON:
কোনো null ভ্যালু JSON এ সংরক্ষণ না করতে চাইলে আপনি ObjectMapper কনফিগার করতে পারেন।
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
এটি JSON আউটপুটে শুধুমাত্র non-null প্রপার্টি অন্তর্ভুক্ত করবে।
5. Handling Complex Types with ObjectMapper
Jackson এর ObjectMapper এর সাহায্যে আপনি complex types (যেমন Lists, Maps, Nested Objects) JSON এ রূপান্তর করতে পারেন।
a) Handling Lists:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonExample {
public static void main(String[] args) {
String json = "[{\"name\":\"John\", \"age\":30}, {\"name\":\"Jane\", \"age\":25}]";
ObjectMapper objectMapper = new ObjectMapper();
try {
// Deserialize JSON array to List of Person objects
List<Person> persons = objectMapper.readValue(json, new TypeReference<List<Person>>(){});
persons.forEach(person -> System.out.println(person.getName()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Explanation:
TypeReference<List<Person>>ব্যবহার করে আপনি List of Person objects রূপান্তর করতে পারেন।
b) Handling Maps:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
public class JacksonExample {
public static void main(String[] args) {
String json = "{\"name\":\"John\", \"age\":30}";
ObjectMapper objectMapper = new ObjectMapper();
try {
// Deserialize JSON to Map
Map<String, Object> map = objectMapper.readValue(json, Map.class);
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Jackson এর ObjectMapper ক্লাস ব্যবহার করে আপনি Java objects এবং JSON এর মধ্যে রূপান্তর (serialization/deserialization) করতে পারেন। এটি JSON ডেটার সাথে কাজ করার জন্য অত্যন্ত কার্যকর এবং সহজ উপায়। Custom ObjectMapper কনফিগারেশন আপনাকে date formats, ignore unknown properties, null values, এবং অন্যান্য সেটিংস কাস্টমাইজ করতে সাহায্য করে। Complex types (যেমন lists বা maps) সহজেই Jackson এর সাহায্যে JSON ফরম্যাটে রূপান্তর করা সম্ভব।
Jackson একটি অত্যন্ত জনপ্রিয় লাইব্রেরি এবং এর সাহায্যে Java এ JSON ডেটার সাথে কার্যকরভাবে কাজ করা সহজ হয়।
Jackson একটি জনপ্রিয় Java library যা মূলত JSON (JavaScript Object Notation) ডেটা প্রক্রিয়াকরণ (parsing, generation, mapping) এর জন্য ব্যবহৃত হয়। Jackson-এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ এবং বহুল ব্যবহৃত ক্লাস হল ObjectMapper। এটি JSON ডেটাকে Java Objects-এ এবং Java Objects-কে JSON-এ রূপান্তর (serialization/deserialization) করার জন্য ব্যবহৃত হয়।
ObjectMapper এর ভূমিকা:
ObjectMapper হল Jackson লাইব্রেরির একটি প্রধান ক্লাস যা JSON এবং Java অবজেক্টের মধ্যে কনভার্সন করতে ব্যবহৃত হয়। এটি JSON ডেটার serialization এবং deserialization করার জন্য data-binding প্রযুক্তি ব্যবহার করে।
Serialization মানে হল Java Object কে JSON format এ রূপান্তর করা, এবং Deserialization মানে হল JSON ডেটাকে Java Object এ রূপান্তর করা।
1. ObjectMapper এর ব্যবহার
ObjectMapper ক্লাস Jackson লাইব্রেরির প্রধান ক্লাস যা JSON ডেটা এবং Java অবজেক্টের মধ্যে তথ্য বিনিময় করার জন্য ব্যবহৃত হয়।
1.1. Java Object to JSON Conversion (Serialization)
ObjectMapper ব্যবহার করে আপনি Java অবজেক্টকে JSON স্ট্রিং বা JSON ফাইলে রূপান্তর করতে পারেন। নিচে একটি উদাহরণ দেখানো হলো যেখানে একটি Java Object কে JSON স্ট্রিং এ রূপান্তর করা হচ্ছে:
import com.fasterxml.jackson.databind.ObjectMapper;
class Person {
private String name;
private int age;
// Constructor, getters and setters
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class JacksonExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", 30);
// Create an ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
// Java object to JSON (serialization)
String jsonString = objectMapper.writeValueAsString(person);
System.out.println(jsonString); // Output: {"name":"John","age":30}
}
}
উপরের কোডে, Person ক্লাসের একটি অবজেক্ট তৈরি করা হয়েছে, এবং ObjectMapper ব্যবহার করে এটি JSON ফরম্যাটে রূপান্তরিত করা হয়েছে।
1.2. JSON to Java Object Conversion (Deserialization)
আপনি JSON ডেটাকে Java অবজেক্টে রূপান্তর করতে ObjectMapper ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো যেখানে একটি JSON string কে Java Object এ রূপান্তর করা হচ্ছে:
import com.fasterxml.jackson.databind.ObjectMapper;
class Person {
private String name;
private int age;
// Constructor, getters and setters
public Person() {} // Default constructor is needed for deserialization
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class JacksonExample {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"John\", \"age\":30}";
// Create an ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
// JSON string to Java object (deserialization)
Person person = objectMapper.readValue(jsonString, Person.class);
System.out.println(person.getName()); // Output: John
System.out.println(person.getAge()); // Output: 30
}
}
এখানে, একটি JSON স্ট্রিং দেওয়া হয়েছে এবং ObjectMapper এর readValue() মেথড ব্যবহার করে তা Person অবজেক্টে রূপান্তরিত করা হয়েছে।
2. ObjectMapper এর গুরুত্বপূর্ণ মেথডসমূহ
ObjectMapper ক্লাসে বেশ কিছু গুরুত্বপূর্ণ মেথড রয়েছে যা JSON এবং Java অবজেক্টের মধ্যে কনভার্সন করার জন্য ব্যবহৃত হয়:
writeValue():
- writeValue() মেথডটি Java অবজেক্টকে JSON এ রূপান্তরিত করে এবং এটি সরাসরি JSON ফাইলে বা স্ট্রিং হিসেবে রিটার্ন করতে পারে।
objectMapper.writeValue(new File("person.json"), person); objectMapper.writeValueAsString(person);readValue():
- readValue() মেথডটি JSON ডেটাকে Java অবজেক্টে রূপান্তরিত করে।
Person person = objectMapper.readValue(jsonString, Person.class);convertValue():
- convertValue() মেথডটি একটি অবজেক্টকে অন্য ধরণের অবজেক্টে রূপান্তরিত করতে ব্যবহৃত হয়। এটি একটি কাস্টম কনভার্সন ফিচার সরবরাহ করে।
MyClass myObject = objectMapper.convertValue(person, MyClass.class);writeTree():
- writeTree() মেথডটি JsonNode তে Java অবজেক্ট লেখে, যা JSON ডেটার এক প্রকার কাঠামো।
JsonNode node = objectMapper.valueToTree(person);
3. ObjectMapper এর Advantages
- High Performance: Jackson ObjectMapper খুব দ্রুত JSON ডেটা প্রসেস করে, যা বৃহৎ ডেটাসেটের জন্য খুবই কার্যকরী।
- Annotations Support: Jackson এর annotations ব্যবহার করে JSON ডেটা এবং Java অবজেক্টের মধ্যে কনভার্সন কাস্টমাইজ করা যায়। যেমন @JsonProperty, @JsonIgnore, @JsonCreator ইত্যাদি।
- Streaming API: Jackson এর streaming API ব্যবহার করে আপনি JSON ডেটা একে একে প্রসেস করতে পারেন, যা খুব বড় JSON ডেটা হ্যান্ডল করার জন্য উপকারী।
- Data-binding: Jackson এর data-binding টেকনোলজি JSON ডেটার সাথে Java অবজেক্টের সম্পর্ক সহজভাবে সংজ্ঞায়িত করে এবং এটি সরাসরি রূপান্তরের সুযোগ প্রদান করে।
Jackson এর ObjectMapper ক্লাস হল JSON এবং Java অবজেক্টের মধ্যে রূপান্তর করার জন্য সবচেয়ে গুরুত্বপূর্ণ এবং ব্যাপকভাবে ব্যবহৃত একটি টুল। এটি serialization (Java Object to JSON) এবং deserialization (JSON to Java Object) সহজ করে তোলে। Jackson high-performance, flexible, এবং customizable যা ডেভেলপারদের JSON ডেটার সাথে কাজ করার সময় আরও সুবিধা প্রদান করে। ObjectMapper এর বিভিন্ন মেথড ব্যবহার করে আপনি JSON ডেটাকে খুব সহজে Java অবজেক্টে এবং Java অবজেক্টকে JSON ফরম্যাটে রূপান্তর করতে পারবেন।
Jackson একটি শক্তিশালী লাইব্রেরি যা JSON ডেটা ফরম্যাটকে Java objects এ এবং Java objects কে JSON ফরম্যাটে রূপান্তর করতে সাহায্য করে। এই প্রক্রিয়া Deserialization নামে পরিচিত, যেখানে JSON স্ট্রিং বা ফাইলকে Java object এ রূপান্তর করা হয়।
ObjectMapper Jackson এর সবচেয়ে গুরুত্বপূর্ণ ক্লাস যা JSON to Java Object (Deserialization) এবং Java Object to JSON (Serialization) এর কাজ পরিচালনা করে।
এই নিবন্ধে, আমরা ObjectMapper ব্যবহার করে JSON থেকে Java Object তে রূপান্তর করার প্রক্রিয়া (Deserialization) নিয়ে বিস্তারিত আলোচনা করব।
1. Jackson ObjectMapper Overview
ObjectMapper হল Jackson লাইব্রেরির প্রধান ক্লাস যা JSON ডেটা এবং Java objects এর মধ্যে মুভমেন্ট করে। এটি ডেটাকে JSON ফরম্যাটে রূপান্তর (Serialization) এবং JSON থেকে Java object এ রূপান্তর (Deserialization) করতে ব্যবহৃত হয়।
Deserialization: JSON ফাইল বা স্ট্রিংকে Java object এ রূপান্তর করা।
Serialization: Java object কে JSON ফরম্যাটে রূপান্তর করা।
2. JSON থেকে Java Object এ কনভার্ট (Deserialization)
Deserialization হল সেই প্রক্রিয়া যেখানে JSON ডেটাকে Java object এ রূপান্তর করা হয়। Jackson এর ObjectMapper ক্লাসের মাধ্যমে এই কাজটি সহজে করা যায়।
2.1. Deserialization Example: JSON to Java Object
ধরা যাক আপনার কাছে একটি JSON স্ট্রিং রয়েছে:
{
"name": "John",
"age": 30,
"email": "john.doe@example.com"
}
এখন আপনি এই JSON ডেটাকে Java Object এ রূপান্তর করতে চান।
Step 1: Java Class তৈরি করা
প্রথমে আপনাকে একটি Java class তৈরি করতে হবে যার মধ্যে সেই JSON ফিল্ডগুলো থাকবে। এই ক্ষেত্রে, JSON ফিল্ডগুলির সাথে মিল রেখে Person ক্লাস তৈরি করা হলো:
public class Person {
private String name;
private int age;
private String email;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Step 2: Jackson এর ObjectMapper ব্যবহার করা
এখন, ObjectMapper ব্যবহার করে JSON স্ট্রিংকে Person ক্লাসের একটি Java object এ রূপান্তর করা যাবে।
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
// JSON string
String json = "{\"name\":\"John\", \"age\":30, \"email\":\"john.doe@example.com\"}";
// Create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
try {
// Deserialize JSON string to Java object
Person person = objectMapper.readValue(json, Person.class);
// Print Java object data
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("Email: " + person.getEmail());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
Name: John
Age: 30
Email: john.doe@example.com
Explanation:
objectMapper.readValue(json, Person.class)মেথডটি JSON স্ট্রিংjsonকে Person ক্লাসে রূপান্তরিত করেছে।- Person ক্লাসে থাকা name, age, এবং email ফিল্ডগুলির মান JSON স্ট্রিং থেকে নেওয়া হয়েছে।
3. JSON ফাইল থেকে Java Object এ Deserialization
আপনি যদি JSON স্ট্রিং এর পরিবর্তে একটি JSON ফাইল থেকে ডেটা রিড করতে চান, তবে সেটিও খুব সহজ।
Example: JSON File to Java Object Conversion
ধরা যাক, আপনার একটি person.json নামের ফাইল রয়েছে যার মধ্যে নিম্নলিখিত JSON ডেটা রয়েছে:
{
"name": "Alice",
"age": 25,
"email": "alice.smith@example.com"
}
Step 1: JSON ফাইল থেকে Java Object এ রূপান্তর করা
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
public class Main {
public static void main(String[] args) {
// Create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
try {
// Read JSON from file and convert to Java object
Person person = objectMapper.readValue(new File("person.json"), Person.class);
// Print Java object data
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
System.out.println("Email: " + person.getEmail());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
Name: Alice
Age: 25
Email: alice.smith@example.com
Explanation:
- এখানে
objectMapper.readValue(new File("person.json"), Person.class)মেথড ব্যবহার করে JSON ফাইলটি পড়ে এবং তা Person ক্লাসের Java object এ রূপান্তরিত করেছে।
4. Jackson ObjectMapper এর অন্যান্য ফিচারসমূহ
- Handling Null Values: Jackson
nullভ্যালু গুলি ডিফল্টভাবে মান্য করে। তবে আপনি যদি চান যেnullভ্যালু গুলি JSON থেকে Java object এ ডেসিরিয়ালাইজ না হোক, তবে@JsonInclude(JsonInclude.Include.NON_NULL)অ্যানোটেশন ব্যবহার করতে পারেন। Custom Deserialization: আপনি যদি JSON ডেটা থেকে Java object এ কাস্টমভাবে রূপান্তর করতে চান, তবে আপনি Jackson এর কাস্টম deserializer ব্যবহার করতে পারেন। যেমন:
public class PersonDeserializer extends JsonDeserializer<Person> { @Override public Person deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonNode node = p.getCodec().readTree(p); String name = node.get("name").asText(); int age = node.get("age").asInt(); String email = node.get("email").asText(); return new Person(name, age, email); } }Date and Time Formatting: Jackson
@JsonFormatঅ্যানোটেশন ব্যবহার করে তারিখ এবং সময়ের ফরম্যাট কাস্টমাইজ করতে সহায়তা করে।@JsonFormat(pattern="yyyy-MM-dd") private Date birthDate;- Ignore Unknown Properties: যদি আপনার JSON ডেটাতে অতিরিক্ত প্রপার্টি থাকে যা Java object এ নেই, তবে আপনি @JsonIgnoreProperties(ignoreUnknown = true) ব্যবহার করে সেগুলি উপেক্ষা করতে পারেন।
Jackson ObjectMapper হল একটি শক্তিশালী টুল যা সহজেই JSON ডেটাকে Java objects এ রূপান্তর (Deserialization) এবং Java objects কে JSON এ রূপান্তর (Serialization) করতে সহায়তা করে। এটি data binding, streaming, এবং tree model এর মাধ্যমে JSON ডেটা প্রক্রিয়া করা সহজ করে তোলে। Jackson এর সাহায্যে আপনি দ্রুত এবং কার্যকরভাবে JSON থেকে Java object এ রূপান্তর করতে পারবেন এবং কোডের কার্যকারিতা এবং ব্যাবহারযোগ্যতা বাড়াতে পারবেন।
Jackson একটি জনপ্রিয় Java library যা JSON ডেটার সাথে কাজ করার জন্য ব্যবহৃত হয়। Jackson এর ObjectMapper ক্লাসটি Java objects কে JSON ফরম্যাটে রূপান্তর (Serialization) এবং JSON কে Java objects তে রূপান্তর (Deserialization) করতে ব্যবহৃত হয়। আজকের আলোচনা হবে ObjectMapper ব্যবহার করে Java Object থেকে JSON এ কনভার্ট করার (Serialization) প্রক্রিয়া সম্পর্কে।
1. Jackson ObjectMapper Overview
ObjectMapper হল Jackson লাইব্রেরির একটি ক্লাস যা JSON ডেটা প্রসেস করার জন্য ব্যবহৃত হয়। এটি JSON থেকে Java object তৈরি করতে (Deserialization) এবং Java object থেকে JSON তৈরি করতে (Serialization) ব্যবহৃত হয়।
Jackson এ Serialization মানে হল একটি Java object কে JSON string এ রূপান্তর করা। এটি সাধারণত একটি ফাইল, ডাটাবেস, অথবা নেটওয়ার্কে JSON ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
2. Java Object to JSON Conversion (Serialization)
Jackson এর ObjectMapper ক্লাস ব্যবহার করে Java Object কে JSON এ রূপান্তর (Serialization) করার একটি সাধারণ প্রক্রিয়া দেখব।
Step 1: Jackson Dependency (Maven) Setup
প্রথমে আপনাকে আপনার প্রোজেক্টে Jackson লাইব্রেরি যোগ করতে হবে। যদি আপনার প্রোজেক্ট Maven ব্যবহার করে, তবে pom.xml ফাইলে Jackson এর ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version> <!-- latest version -->
</dependency>
Step 2: Java Object Definition
ধরা যাক, আমাদের একটি Person ক্লাস আছে যেটি একটি Java object। এটি name এবং age ফিল্ড ধারণ করে।
public class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Step 3: ObjectMapper দিয়ে Serialization (Java Object থেকে JSON)
ObjectMapper এর মাধ্যমে Person অবজেক্টকে JSON String এ কনভার্ট করার জন্য নিচের কোডটি ব্যবহার করা যেতে পারে।
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
try {
// Create an instance of the Person class
Person person = new Person("John", 30);
// Create an ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
// Serialize Java object to JSON string
String jsonString = objectMapper.writeValueAsString(person);
// Print the JSON string
System.out.println(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
{"name":"John","age":30}
এখানে, ObjectMapper ক্লাসের writeValueAsString() মেথডটি Java object (এখানে Person অবজেক্ট) কে JSON string এ রূপান্তরিত করেছে।
3. Customizing JSON Output
Jackson আপনাকে annotations ব্যবহার করে JSON আউটপুট কাস্টমাইজ করার সুবিধা দেয়। এখানে কিছু কাস্টমাইজেশনের উদাহরণ দেওয়া হল:
a. Customizing JSON Property Names
আপনি যদি Java object এর field names এবং JSON keys এর মধ্যে পার্থক্য করতে চান, তবে Jackson এর @JsonProperty অ্যানোটেশন ব্যবহার করতে পারেন।
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
@JsonProperty("full_name")
private String name;
@JsonProperty("years_old")
private int age;
// Constructor, Getters, and Setters
}
এখন, যখন আপনি এই Person অবজেক্টটিকে JSON এ রূপান্তর করবেন, তখন JSON এ full_name এবং years_old থাকবে।
b. Ignoring Fields in JSON
কিছু ফিল্ডকে JSON এ অন্তর্ভুক্ত না করার জন্য @JsonIgnore অ্যানোটেশন ব্যবহার করা যায়।
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Person {
private String name;
private int age;
@JsonIgnore
private String password;
// Constructor, Getters, and Setters
}
এখন, password ফিল্ডটি JSON আউটপুটে থাকবে না।
c. Using @JsonInclude to Exclude Null Values
@JsonInclude অ্যানোটেশন ব্যবহার করে আপনি null মানের ভ্যালুগুলি JSON থেকে বাদ দিতে পারেন।
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
private String name;
private Integer age; // Will be omitted if null
// Constructor, Getters, and Setters
}
এতে, null ভ্যালু থাকলে তা JSON আউটপুটে উপস্থিত হবে না।
4. Pretty-Print JSON Output
যদি আপনি JSON আউটপুটকে pretty-print করতে চান, যাতে এটি মানুষের জন্য সহজে পড়া যায়, তবে Jackson এর ObjectMapper এর মাধ্যমে pretty-print করা যেতে পারে।
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
System.out.println(jsonString);
Output:
{
"name" : "John",
"age" : 30
}
এটি JSON আউটপুটকে সন্নিবেশযোগ্য এবং সহজে পড়ার জন্য সুন্দরভাবে ফরম্যাট করে।
5. Handling Lists or Arrays in JSON Serialization
Jackson ব্যবহার করে আপনি Java List বা Array অবজেক্টকে JSON এ রূপান্তর করতে পারেন।
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
try {
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(fruits);
System.out.println(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
["Apple","Banana","Cherry"]
এখানে, List<String> কে JSON array তে রূপান্তরিত করা হয়েছে।
Jackson এর ObjectMapper ক্লাস ব্যবহার করে Java Object থেকে JSON এ কনভার্ট (Serialization) করা খুবই সহজ। Jackson অত্যন্ত দ্রুত এবং কার্যকরীভাবে JSON তৈরি করতে পারে, যা ডেটা এক্সচেঞ্জ, ডেটাবেস ম্যানিপুলেশন, ওয়েব সার্ভিসেস এবং মোবাইল অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। Serialization প্রক্রিয়া কাস্টমাইজ করার জন্য Jackson এর annotations ব্যবহার করা যেতে পারে, যেমন @JsonProperty, @JsonIgnore, এবং @JsonInclude।
- ObjectMapper দিয়ে Java objects কে JSON এ রূপান্তর করা এবং JSON থেকে Java objects এ রূপান্তর করা খুবই সহজ।
- Jackson এর pretty-printing, annotations support, এবং flexible configuration এটি JSON ডেটার সাথে কাজ করার জন্য একটি আদর্শ লাইব্রেরি বানায়।
Jackson হল একটি অত্যন্ত জনপ্রিয় এবং শক্তিশালী JSON লাইব্রেরি, যা Java objects এবং JSON এর মধ্যে রূপান্তর (serialization এবং deserialization) করতে ব্যবহৃত হয়। এর মূল অংশ ObjectMapper ক্লাস, যা JSON ডেটাকে Java objects-এ রূপান্তর করতে এবং Java objects-কে JSON ফরম্যাটে রূপান্তর করতে ব্যবহৃত হয়।
ObjectMapper কে কাস্টমাইজ করা অনেক ক্ষেত্রেই দরকার হয়, যাতে আপনি JSON ডেটাকে আপনার বিশেষ প্রয়োজন অনুযায়ী প্রক্রিয়া করতে পারেন, যেমন:
- Date formatting
- Property naming strategies
- Custom serializers/deserializers
- Handling missing properties
এখানে আমরা ObjectMapper কাস্টমাইজেশন এর কিছু সাধারণ টেকনিক আলোচনা করব।
1. ObjectMapper কাস্টমাইজেশন: বিভিন্ন কৌশল
1.1. Property Naming Strategy কাস্টমাইজ করা
Jackson ডিফল্টভাবে Java objects এর প্রপার্টি নামকে camelCase-এ রূপান্তর করে, কিন্তু আপনি এটি কাস্টমাইজ করতে পারেন, যেমন snake_case, PascalCase, বা অন্য কোনো স্টাইল।
How to Customize Property Naming Strategy:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
public class ObjectMapperExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Set custom property naming strategy
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
MyObject obj = new MyObject("John", "Doe");
String json = objectMapper.writeValueAsString(obj);
System.out.println(json); // {"first_name":"John","last_name":"Doe"}
}
}
class MyObject {
public String firstName;
public String lastName;
public MyObject(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
Explanation:
- PropertyNamingStrategies.SNAKE_CASE: Java objects এর camelCase প্রপার্টি নামগুলো snake_case-এ রূপান্তরিত হবে (যেমন
firstNameহবেfirst_name)।
Jackson আরও অন্যান্য naming strategies সমর্থন করে যেমন UPPER_CAMEL_CASE, LOWER_CASE, এবং custom naming strategies তৈরি করা সম্ভব।
1.2. Date Format কাস্টমাইজেশন
Jackson-এ Date টাইপ ফিল্ডগুলোকে JSON এ serialize এবং deserialize করার সময়, আপনি Date format কাস্টমাইজ করতে পারেন। এটি সাধারণত প্রয়োজন হয় যখন আপনার JSON ডেটায় তারিখের ফরম্যাট পরিবর্তন করতে হয় (যেমন yyyy-MM-dd বা dd/MM/yyyy )।
How to Customize Date Format:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ObjectMapperDateFormatExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Set custom date format
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
objectMapper.setDateFormat(dateFormat);
MyObjectWithDate obj = new MyObjectWithDate(new Date());
String json = objectMapper.writeValueAsString(obj);
System.out.println(json); // {"date":"2024-12-19"}
}
}
class MyObjectWithDate {
public Date date;
public MyObjectWithDate(Date date) {
this.date = date;
}
}
Explanation:
- এখানে, আমরা SimpleDateFormat ব্যবহার করে yyyy-MM-dd ফরম্যাটে তারিখ প্রদর্শন করতে Jackson এর setDateFormat() মেথড ব্যবহার করেছি।
1.3. Custom Serializer and Deserializer
Jackson আপনাকে custom serializers এবং deserializers তৈরি করার সুযোগ দেয়, যা বিশেষ ধরনের অবজেক্টের রূপান্তরের জন্য প্রয়োজনীয় হতে পারে।
How to Create Custom Serializer and Deserializer:
Custom Serializer:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
class MyCustomSerializer extends JsonSerializer<MyObject> {
@Override
public void serialize(MyObject value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeStringField("first_name", value.firstName);
gen.writeStringField("last_name", value.lastName);
gen.writeEndObject();
}
}
Custom Deserializer:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
class MyCustomDeserializer extends JsonDeserializer<MyObject> {
@Override
public MyObject deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String[] parts = p.getText().split(",");
return new MyObject(parts[0], parts[1]);
}
}
Using Custom Serializer and Deserializer with ObjectMapper:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
public class ObjectMapperCustomSerializationExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Register custom serializer and deserializer
SimpleModule module = new SimpleModule();
module.addSerializer(MyObject.class, new MyCustomSerializer());
module.addDeserializer(MyObject.class, new MyCustomDeserializer());
objectMapper.registerModule(module);
MyObject obj = new MyObject("John", "Doe");
String json = objectMapper.writeValueAsString(obj);
System.out.println(json); // Custom serialized JSON
MyObject deserializedObj = objectMapper.readValue("John,Doe", MyObject.class);
System.out.println(deserializedObj.firstName + " " + deserializedObj.lastName); // John Doe
}
}
class MyObject {
public String firstName;
public String lastName;
public MyObject(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
Explanation:
- Custom Serializer:
MyCustomSerializerকাস্টম JSON সিরিয়ালাইজার যা MyObject ক্লাসের প্রপার্টি গুলিকে কাস্টম পদ্ধতিতে JSON এ রূপান্তর করে। - Custom Deserializer:
MyCustomDeserializerকাস্টম JSON ডেসিরিয়ালাইজার যা একটি কাস্টম স্ট্রিং ফরম্যাট থেকে MyObject তৈরি করে।
1.4. Handling Missing Properties
Jackson এ, আপনি যদি একটি Java object থেকে JSON তৈরি করেন, তবে কখনো কখনো কিছু প্রপার্টি missing হয়ে যেতে পারে বা উপেক্ষা করা হতে পারে। আপনি @JsonInclude এবং @JsonIgnore ব্যবহার করে এই আচরণ কাস্টমাইজ করতে পারেন।
How to Handle Missing Properties:
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class MyObjectWithMissingProperties {
@JsonInclude(JsonInclude.Include.NON_NULL) // Include only non-null values
public String name;
@JsonIgnore // Ignore this field during serialization
public String password;
}
Explanation:
- @JsonInclude:
NON_NULLঅপশন ব্যবহার করে আপনি শুধুমাত্র null নয় এমন প্রপার্টিগুলিকে JSON-এ অন্তর্ভুক্ত করতে পারেন। - @JsonIgnore: একটি প্রপার্টি বা ফিল্ড JSON সিরিয়ালাইজেশন/ডেসিরিয়ালাইজেশন থেকে উপেক্ষা করতে এই অ্যানোটেশন ব্যবহার করা হয়।
1.5. ObjectMapper Configuration for Pretty Print
JSON ডেটা যখন pretty print করতে চান (যে ফরম্যাটে মানুষ সহজে পড়তে পারে), তখন আপনি ObjectMapper এর মাধ্যমে এটি কাস্টমাইজ করতে পারেন।
How to Enable Pretty Print:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public class ObjectMapperPrettyPrintExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// Enable pretty print
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
MyObject obj = new MyObject("John", "Doe");
String json = objectMapper.writeValueAsString(obj);
System.out.println(json); // Pretty printed JSON
}
}
Explanation:
- SerializationFeature.INDENT_OUTPUT: এটি JSON আউটপুটকে pretty print বা formatted করে দেয়, যেখানে প্রতিটি নতুন লাইন এবং ইনডেন্টেশন সঠিকভাবে থাকে।
- ObjectMapper হল Jackson এর কেন্দ্রবিন্দু এবং এটি JSON ডেটা Java objects এবং Java objects-কে JSON-এ রূপান্তর করতে ব্যবহৃত হয়।
- Jackson এর ObjectMapper কাস্টমাইজেশন থেকে আপনি property naming, date formatting, custom serializers/deserializers, pretty printing, এবং missing property handling সহ বিভিন্ন সুবিধা পেতে পারেন।
- এই কাস্টমাইজেশন ফিচারগুলির মাধ্যমে আপনি আপনার JSON প্রক্রিয়ার আচরণ নিয়ন্ত্রণ করতে পারবেন এবং আরও নমনীয় এবং কার্যকরী কোড তৈরি করতে পারবেন।
Jackson-এর ObjectMapper ব্যবহার করে আপনি খুব সহজেই এবং দক্ষতার সাথে JSON প্রক্রিয়া করতে পারেন, এবং এর কাস্টমাইজেশন ফিচারগুলির মাধ্যমে আপনি আপনার প্রোজেক্টের প্রয়োজনীয়তা অনুযায়ী এটি আরও শক্তিশালী করতে পারেন।
Read more